package com.easysoft.framework.beans;

import com.easysoft.commons.utils.JSONUtils;

import java.io.Serializable;

/**
 * 分页查询
 * 
 * @author try
 */
public class Page implements Serializable {

	private static final int DEF_LENGTH = 10;
	private static final int DEF_PAGE_NUM = 1;

	/**
	 * 每页显示记录数
	 */
	private int length;

	/**
	 * 查询结果总记录数
	 */
	private int maxRow;

	/**
	 * 当前页码
	 */
	private int pageNum;

	/**
	 * 最大页码
	 */
	private int maxPage;

	private static final long serialVersionUID = 1L;

	/**
	 * 初始化分页查询条件，每页显示记录10条。
	 */
	public Page() {
		this.length = DEF_LENGTH;
		this.pageNum = DEF_PAGE_NUM;
		this.maxPage = DEF_PAGE_NUM;
	}

	/**
	 * 初始化分页查询条件，每页显示length条。
	 * 
	 * @param length
	 *            每页显示记录数
	 */
	public Page(int length) {
		this.length = length;
		this.pageNum = DEF_PAGE_NUM;
		this.maxPage = DEF_PAGE_NUM;
	}

	/**
	 * 获取每页显示记录数
	 * 
	 * @return 每页显示记录数
	 */
	public int getLength() {
		return length;
	}

	/**
	 * 设置每页显示记录数
	 * 
	 * @param length
	 *            每页显示记录数
	 */
	public void setLength(int length) {
		this.length = length;
	}

	/**
	 * 获取查询结果总记录数
	 * 
	 * @return 查询结果总记录数
	 */
	public int getMaxRow() {
		return maxRow;
	}

	/**
	 * 设置查询结果总记录数
	 * 
	 * @param maxRow
	 *            查询结果总记录数
	 */
	public void setMaxRow(int maxRow) {
		this.maxRow = maxRow;
		this.setMaxPage((int) Math.ceil((float) maxRow / length));
	}

	/**
	 * 读取起始行数
	 * 
	 * @return 起始行数
	 */
	public int getRowNum() {
		return (this.getPageNum() - 1) * length;
	}

	/**
	 * 获取当前页码
	 * 
	 * @return 当前页码
	 */
	public int getPageNum() {
		return pageNum;
	}

	/**
	 * 设置当前页码
	 * 
	 * @param pageNum
	 *            当前页码
	 */
	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}

	/**
	 * 获取最大页码
	 * 
	 * @return 最大页码
	 */
	public int getMaxPage() {
		return maxPage;
	}

	/**
	 * 设置最大页码
	 * 
	 * @param maxPage
	 *            最大页码
	 */
	public void setMaxPage(int maxPage) {
		this.maxPage = maxPage;
	}

	@Override
	public String toString() {
		return JSONUtils.object2Json(this);
	}

}
